﻿Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D
''' <summary>
''' Zeigt die Informationen eines KO's an sowie Gabeleiste, Fonds und Einnahmen des Spielers.
''' </summary>
''' <remarks></remarks>
Public Class ObjektKOInformation
    Inherits Objekt2D
    Enum Seiten
        KOInformationen
        EinheitenInformationen
    End Enum
    Public Const Bildbreite As Integer = 480
    Public Const Bildhöhe As Integer = 640
    Dim StartpunktX As Integer = 500
    Dim StartpunktY As Integer = 500
    Dim Position As Point
    Dim MomentanerKO As Integer
    Dim MomentanerSpieler As Integer
    Dim KOAnzeige As ObjektKOAnzeige
    Dim KOName As Point
    Dim KOBeschreibung As Point
    Dim KOStil As Point
    Dim KOGabe As Point
    Dim KOSpezialGabe As Point
    Dim Synergien As Point
    Dim Text As ObjektText
    Dim KleinerText As ObjektText
    Public Shared BildTexturen() As Texture = {}
    Dim SynergieKOBreiten() As ObjektKOBeschreibung.GabeSynergieBeschreibungen = {}
    Dim KleineTextHöhe As Integer = 0
    Dim Seite As Seiten = Seiten.KOInformationen
    Public Sub New(ByVal X As Integer, ByVal Y As Integer, ByVal Fixed As PointF, Optional ByVal Handler As ObjektPanel = Nothing)
        MyBase.New("KOInformation", New Rectangle(0, 0, Bildbreite, Bildhöhe), New Point(X, Y), Fixed, Handler)
        ObjektMaus.Visible = False
        Position = New Point(X, Y)
        StartpunktX = X + 250
        StartpunktY = Y + 10
        MomentanerKO = 0
        Text = New ObjektText(New String() {}, 0, 0, Nothing, "Arial", 12, FontStyle.Regular)
        KleinerText = New ObjektText(New String() {}, 0, 0, Nothing, "Arial Unicode MS", 8, FontStyle.Regular)
        MomentanerSpieler = Objektverwalter.Spielfeld.AktuellerSpieler.Spieler
        KOAnzeige = New ObjektKOAnzeige(Objektverwalter.Spielfeld.AktuellerSpieler, New Point(StartpunktX, StartpunktY))
        'wir laden die Texturen
        If BildTexturen.Length = 0 Then
            LoadTextur()
        End If
        AddHandler Hauptmenü.MainMenü.KeyDown, AddressOf KeyDown2
        AddHandler Hauptmenü.MainMenü.MalPanel.MouseDown, AddressOf MouseDown2
        AddHandler Hauptmenü.MainMenü.MalPanel.MouseWheel, AddressOf MouseWheel2
        KOChange()
    End Sub
    Public Sub New(ByVal X As Integer, ByVal Y As Integer, ByVal KOID As Integer, ByVal Fixed As PointF, Optional ByVal Handler As ObjektPanel = Nothing)
        MyBase.New("KOInformation", New Rectangle(0, 0, Bildbreite, Bildhöhe), New Point(X, Y), Fixed, Handler)
        ObjektMaus.Visible = False
        Position = New Point(X, Y)
        StartpunktX = X + 250
        StartpunktY = Y + 10
        Text = New ObjektText(New String() {}, 0, 0, Nothing, "Arial", 12, FontStyle.Regular)
        KleinerText = New ObjektText(New String() {}, 0, 0, Nothing, "Arial Unicode MS", 8, FontStyle.Regular)

        'wir laden die Texturen
        If BildTexturen.Length = 0 Then
            LoadTextur()
        End If
        AddHandler Hauptmenü.MainMenü.KeyDown, AddressOf KeyDown2
        AddHandler Hauptmenü.MainMenü.MalPanel.MouseDown, AddressOf MouseDown2
        AddHandler Hauptmenü.MainMenü.MalPanel.MouseWheel, AddressOf MouseWheel2
        KOChange(KOID)
    End Sub

    Public Sub InfoBeenden()
        RemoveHandles()
        If TypeOf Objektverwalter.Menü Is ObjektSpielMenü Then
            Dim M As ObjektSpielMenü = Objektverwalter.Menü
            M.Spielmodus = ObjektSpielMenü.Spielmodi.Nichts
            ObjektMaus.Visible = True
            Objektverwalter.Spielfeld.KOInfos = Nothing
        ElseIf TypeOf Objektverwalter.Menü Is ObjektKartenauswahlMenü Then
            Dim M As ObjektKartenauswahlMenü = Objektverwalter.Menü
            M.KOInformation = Nothing
            ObjektMaus.Visible = True
        Else

            ObjektMaus.Visible = True
        End If

    End Sub
    
    Public Shared Sub LoadTextur()
        If BildTexturen.Length = 0 Then
            BildTexturen = New Texture() {Grafikengine.LoadTexture(My.Settings.Resourcenpfad + "KO's\Fein.png"), _
             Grafikengine.LoadTexture(My.Settings.Resourcenpfad + "KO's\Nein.png"), Grafikengine.LoadTexture(My.Settings.Resourcenpfad + "KO's\Stil.png"), _
             Grafikengine.LoadTexture(My.Settings.Resourcenpfad + "KO's\Gabe.png"), Grafikengine.LoadTexture(My.Settings.Resourcenpfad + "KO's\Spezialgabe.png"), _
             Grafikengine.LoadTexture(My.Settings.Resourcenpfad + "KO's\SynergieStern.png"), _
             Grafikengine.LoadTexture(My.Settings.Resourcenpfad + "Objekte\Balken.png"), _
             Grafikengine.LoadTexture(My.Settings.Resourcenpfad + "Objekte\AtkRange.png"), _
             Grafikengine.LoadTexture(My.Settings.Resourcenpfad + "Objekte\FußBild.png")}
        End If
    End Sub

    Public Overrides Function MouseEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) As Boolean
        'Do nothing
    End Function
    Public Overrides Function MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) As String
        Return ""
    End Function
    Public Overrides Function KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) As Boolean
        'Do nothing
    End Function
    ''' <summary>
    ''' Hier mit wählt man die KO's und Spieler durch
    ''' </summary>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Public Overrides Function KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) As Boolean
       
    End Function
    Public Overrides Function MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) As Boolean
        
    End Function

    Private Sub KOChange()
        ReDim SynergieKOBreiten(-1)
        Dim GroßerText As Rectangle = Text.GetSchriftart.MeasureString(Schriftengine.Sprite2, Objektverwalter.KOS(Objektverwalter.Spielfeld.Spieler(MomentanerSpieler).KOS(MomentanerKO).Bild).KOBeschreibung.Name, DrawTextFormat.None, Color.Black)
        Dim KleinText As Rectangle = KleinerText.GetSchriftart.MeasureString(Schriftengine.Sprite2, Objektverwalter.KOS(Objektverwalter.Spielfeld.Spieler(MomentanerSpieler).KOS(MomentanerKO).Bild).KOBeschreibung.Name, DrawTextFormat.None, Color.Black)
        KleineTextHöhe = KleinText.Height
        KOName = New Point(Position.X + (Bildbreite / 4) - (GroßerText.Width / 2), Position.Y + 10)
        KOBeschreibung = New Point(Position.X + 10, Position.Y + 50)
        Dim Zeilen As Integer = Objektverwalter.KOS(Objektverwalter.Spielfeld.Spieler(MomentanerSpieler).KOS(MomentanerKO).Bild).KOBeschreibung.Beschreibung.Length
        KOStil = New Point(KOBeschreibung.X, KOBeschreibung.Y + (KleinText.Height + 3) * Zeilen)
        Zeilen = Objektverwalter.KOS(Objektverwalter.Spielfeld.Spieler(MomentanerSpieler).KOS(MomentanerKO).Bild).KOBeschreibung.Stil.Length
        KOGabe = New Point(KOBeschreibung.X, KOStil.Y + 64 + (KleinText.Height + 3) * Zeilen)
        Zeilen = Objektverwalter.KOS(Objektverwalter.Spielfeld.Spieler(MomentanerSpieler).KOS(MomentanerKO).Bild).KOBeschreibung.Gabebeschreibung.Length
        KOSpezialGabe = New Point(KOGabe.X, KOGabe.Y + 20 + (KleinText.Height + 3) * Zeilen)
        Zeilen = Objektverwalter.KOS(Objektverwalter.Spielfeld.Spieler(MomentanerSpieler).KOS(MomentanerKO).Bild).KOBeschreibung.SpezialgabeBeschreibung.Length
        Synergien = New Point(KOGabe.X, KOSpezialGabe.Y + 20 + (KleinText.Height + 3) * Zeilen)

        SynergieKOBreiten = ObjektKOBeschreibung.GetGabeSynergieBeschreibungen(Objektverwalter.KOS(Objektverwalter.Spielfeld.Spieler(MomentanerSpieler).KOS(MomentanerKO).Bild), KleinerText)
    End Sub
    Private Sub KOChange(ByVal KOID As Integer)
        MomentanerKO = KOID
        ReDim SynergieKOBreiten(-1)
        Dim GroßerText As Rectangle = Text.GetSchriftart.MeasureString(Schriftengine.Sprite2, Objektverwalter.KOS(KOID).KOBeschreibung.Name, DrawTextFormat.None, Color.Black)
        Dim KleinText As Rectangle = KleinerText.GetSchriftart.MeasureString(Schriftengine.Sprite2, Objektverwalter.KOS(KOID).KOBeschreibung.Name, DrawTextFormat.None, Color.Black)
        KleineTextHöhe = KleinText.Height
        KOName = New Point(Position.X + (Bildbreite / 4) - (GroßerText.Width / 2), Position.Y + 10)
        KOBeschreibung = New Point(Position.X + 10, Position.Y + 50)
        Dim Zeilen As Integer = Objektverwalter.KOS(KOID).KOBeschreibung.Beschreibung.Length
        KOStil = New Point(KOBeschreibung.X, KOBeschreibung.Y + (KleinText.Height + 3) * Zeilen)
        Zeilen = Objektverwalter.KOS(KOID).KOBeschreibung.Stil.Length
        KOGabe = New Point(KOBeschreibung.X, KOStil.Y + 64 + (KleinText.Height + 3) * Zeilen)
        Zeilen = Objektverwalter.KOS(KOID).KOBeschreibung.Gabebeschreibung.Length
        KOSpezialGabe = New Point(KOGabe.X, KOGabe.Y + 20 + (KleinText.Height + 3) * Zeilen)
        Zeilen = Objektverwalter.KOS(KOID).KOBeschreibung.SpezialgabeBeschreibung.Length
        Synergien = New Point(KOGabe.X, KOSpezialGabe.Y + 20 + (KleinText.Height + 3) * Zeilen)

        SynergieKOBreiten = ObjektKOBeschreibung.GetGabeSynergieBeschreibungen(Objektverwalter.KOS(KOID), KleinerText)
    End Sub

    Public Overrides Sub Malen()
        If Handler IsNot Nothing Then
            If Not Handler.IsVisible(New Rectangle(Position.X, Position.Y, Bildbreite, Bildhöhe), True) Then
                Exit Sub
            End If
        End If
        Dim Spieler As ObjektSpieler = Nothing
        Dim KO As ObjektKO = Nothing
        Dim Farbe As Color = Nothing
        Select Case Hauptmenü.Formmodus
            Case Hauptmenü.Formmodi.Kartenauswahl
                Dim M As ObjektKartenauswahlMenü = Objektverwalter.Menü
                KO = ObjektLadeklasse.NewKO(Objektverwalter.KOS(MomentanerKO).KOID, ObjektKartenauswahlMenü.MomentanerSpieler)
                Spieler = ObjektKartenauswahlMenü.EinheitenCheckboxen.Spieler
                Farbe = ObjektKartenauswahlMenü.EinheitenCheckboxen.Farbe
            Case Else
                Spieler = Objektverwalter.Spielfeld.Spieler(MomentanerSpieler)
                KO = Spieler.KOS(MomentanerKO)
                Farbe = Spieler.Farbe
        End Select


        ObjektMaus.Visible = False
        MyBase.Malen()
        Dim sngRotation As Double = 0
        Dim intColor As Color = Color.FromArgb(255, 255, 255, 255)
        Grafikengine.szfScale = Nothing
        Select Case Seite
            Case Seiten.KOInformationen
                'wir malen den KO Körper.
                With Grafikengine.recBild
                    .X = 0
                    .Y = 0
                    .Width = 211
                    .Height = 350
                End With
                Grafikengine.ptfPosition = New Point(Position.X + 250, Position.Y + 120)
                Grafikengine.Sprite.Draw2D(Objektverwalter.KOS(KO.Bild).KOTextur, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                'Wir malen Fein Nein
                Grafikengine.recBild = Nothing
                Grafikengine.ptfPosition = KOStil
                Grafikengine.Sprite.Draw2D(BildTexturen(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                Grafikengine.ptfPosition.Y += 20
                Grafikengine.Sprite.Draw2D(BildTexturen(1), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                Grafikengine.ptfPosition.Y += 24
                Grafikengine.ptfPosition.X += 56
                Grafikengine.Sprite.Draw2D(BildTexturen(2), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                Grafikengine.ptfPosition = KOGabe
                Grafikengine.Sprite.Draw2D(BildTexturen(3), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                Grafikengine.ptfPosition = KOSpezialGabe
                Grafikengine.Sprite.Draw2D(BildTexturen(4), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                Grafikengine.ptfPosition = Synergien

                For I = 0 To SynergieKOBreiten.Length - 1
                    Grafikengine.ptfPosition.X = Synergien.X + SynergieKOBreiten(I).Breite + 5
                    Dim Wert As Integer = SynergieKOBreiten(I).Synergie
                    If CDec(Wert) < SynergieKOBreiten(I).Synergie Then Wert += 1
                    For I2 = 1 To Wert
                        Grafikengine.Sprite.Draw2D(BildTexturen(5), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                        Grafikengine.ptfPosition.X += 11
                    Next
                    Grafikengine.ptfPosition.Y += KleineTextHöhe + 3
                Next

                If Not KOAnzeige Is Nothing Then
                    KOAnzeige.Malen()
                End If
                'Zuletzt schreiben wir den Text.
                Grafikengine.Sprite.End()
                Schriftengine.Sprite2.Begin(SpriteFlags.AlphaBlend)
                Text.neuerText(New String() {Objektverwalter.KOS(KO.Bild).KOBeschreibung.Name}, KOName.X, KOName.Y, Nothing)
                Text.Malen(Schriftengine.Sprite2)
                'Wir malen die KO Beschreibung
                KleinerText.neuerText(Objektverwalter.KOS(KO.Bild).KOBeschreibung.Beschreibung, KOBeschreibung.X, KOBeschreibung.Y, Nothing)
                KleinerText.Malen(Schriftengine.Sprite2)
                'Wir malen fein und Nein
                KleinerText.neuerText(New String() {Objektverwalter.KOS(KO.Bild).KOBeschreibung.Fein}, KOStil.X + 40, KOStil.Y, Nothing)
                KleinerText.Malen(Schriftengine.Sprite2)
                KleinerText.neuerText(New String() {Objektverwalter.KOS(KO.Bild).KOBeschreibung.Nein}, KOStil.X + 40, KOStil.Y + 20, Nothing)
                KleinerText.Malen(Schriftengine.Sprite2)
                'Jetzt malen wir den Stil
                KleinerText.neuerText(Objektverwalter.KOS(KO.Bild).KOBeschreibung.Stil, KOStil.X, KOStil.Y + 64, Nothing)
                KleinerText.Malen(Schriftengine.Sprite2)
                'Wir malen Gabe und Spezialgabebeschreibung
                KleinerText.neuerText(New String() {KO.Gaben(0)}, KOGabe.X + 20, KOGabe.Y, Nothing)
                KleinerText.Malen(Schriftengine.Sprite2)
                KleinerText.neuerText(Objektverwalter.KOS(KO.Bild).KOBeschreibung.Gabebeschreibung, KOGabe.X, KOGabe.Y + 20, Nothing)
                KleinerText.Malen(Schriftengine.Sprite2)
                KleinerText.neuerText(New String() {KO.Gaben(1)}, KOSpezialGabe.X + 20, KOSpezialGabe.Y, Nothing)
                KleinerText.Malen(Schriftengine.Sprite2)
                KleinerText.neuerText(Objektverwalter.KOS(KO.Bild).KOBeschreibung.SpezialgabeBeschreibung, KOSpezialGabe.X, KOSpezialGabe.Y + 20, Nothing)
                KleinerText.Malen(Schriftengine.Sprite2)
                'so zu guter letzt die Synergien
                Dim Y As Integer = Synergien.Y
                For I = 0 To SynergieKOBreiten.Length - 1
                    KleinerText.neuerText(New String() {SynergieKOBreiten(I).KONAme}, Synergien.X, Y, Nothing)
                    KleinerText.Malen(Schriftengine.Sprite2)
                    Y += (KleineTextHöhe + 3)
                Next
                'Als nächstes müssten wir Einkommen und so malen das lasen wir aber mal.
                Schriftengine.Sprite2.Flush()
                Schriftengine.Sprite2.End()
                Grafikengine.Sprite.Begin(SpriteFlags.AlphaBlend)

            Case Seiten.EinheitenInformationen
                'Einheiten Infos malen!
                Dim MaxTroopsX As Integer = Math.DivRem(460, (Hauptmenü.Feldbreite + 22 + 8), 0)
                Dim UnitZahl As Integer = 0
                Dim Pos As Point = New Point(MyBase.Koordinaten.X + Hauptmenü.Feldbreite + 2, MyBase.Koordinaten.Y + Hauptmenü.Feldbreite + 2)
                Dim ID As Integer = 0
                For Each Unit In Objektverwalter.AlleEinheiten
                    ObjektEinheit.Malen(Pos.X, Pos.Y, Spieler, 0, ID, Farbe)
                    'Offensiv und Deffensiv Balken anzeigen
                    Dim Offensive As Integer = KO.GetOffensivStärke(Unit.Einheit)
                    MalenBalken(New Point(Pos.X + 4 + Hauptmenü.Feldbreite, Pos.Y - 8 + Hauptmenü.Feldbreite / 4), Offensive)
                    Dim Deffensive As Integer = KO.GetDeffensivStärke(Unit.Einheit)
                    MalenBalken(New Point(Pos.X + 4 + Hauptmenü.Feldbreite, Pos.Y - 8 + Hauptmenü.Feldbreite / 4 + 10), Deffensive)
                    'Reichweiten Bonus und Bewegungsbonus abfragen

                    If KO.Reichweite <> 0 Then
                        If Unit.Einheit.Reichweitemax > 1 Then
                            DrawReichweitenBonus(New Point(Pos.X - Hauptmenü.Feldbreite / 2, Pos.Y + Hauptmenü.Feldbreite / 2 + 1), KO.Reichweite, sngRotation, intColor)
                        ElseIf Unit.Einheit.MinimaleReichweite = 1 And KO.NahkampfReichweitenBonus > 0 Then
                            DrawReichweitenBonus(New Point(Pos.X, Pos.Y + Hauptmenü.Feldbreite / 2 + 1), KO.NahkampfReichweitenBonus, sngRotation, intColor)
                        End If
                    ElseIf KO.NahkampfReichweitenBonus > 0 Then
                        If Unit.Einheit.MinimaleReichweite = 1 Then
                            DrawReichweitenBonus(New Point(Pos.X, Pos.Y + Hauptmenü.Feldbreite / 2 + 1), KO.NahkampfReichweitenBonus, sngRotation, intColor)
                        End If
                    End If
                    If Not KO.Bewegungsbonus Is Nothing Then
                        Dim Bonus As Integer = KO.Bewegungsbonus.GetWert(Unit.EinheitenID)
                        If Bonus <> 0 Then
                            DrawBewegungsBonus(New Point(Pos.X + Hauptmenü.Feldbreite, Pos.Y + Hauptmenü.Feldbreite / 2 + 1), Bonus, sngRotation, intColor)
                        End If
                    End If
                    'So vorbereitungen für die nächste Einheit
                    Pos.X += 30 + Hauptmenü.Feldbreite
                    ID += 1
                    UnitZahl += 1
                    If UnitZahl >= MaxTroopsX Then
                        Pos.X = MyBase.Koordinaten.X + Hauptmenü.Feldbreite + 2
                        Pos.Y += Hauptmenü.Feldbreite * 2
                        UnitZahl = 0
                    End If
                Next
        End Select
    End Sub
    ''' <summary>
    ''' Malt einen Balken für Offensive oder Deffensive Balken sind 22 Pixel breit
    ''' </summary>
    ''' <param name="Position">Die linke obere Ecke! Hinweis: Balkenhöhe=8 Pixel</param>
    ''' <param name="Wert"></param>
    ''' <remarks></remarks>
    Private Sub MalenBalken(ByVal Position As Point, ByVal Wert As Integer)
        Dim sngRotation As Double = 0
        Dim intColor As Color = Color.FromArgb(255, 255, 255, 255)
        Grafikengine.szfScale = Nothing
        Select Case Wert
            Case 100
                'Der einfachste Fall
                Grafikengine.ptfPosition = Position
                Grafikengine.ptfPosition.Y += 2
                With Grafikengine.recBild
                    .X = 0
                    .Y = 0
                    .Width = 23
                    .Height = 6
                End With
                Grafikengine.Sprite.Draw2D(BildTexturen(6), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
            Case Is < 100
                'Wir haben schächere Truppen! Heul! Heul! und nochmal Heul!
                Dim Bonus As Integer = Wert
                Dim PixelZahl As Integer = Math.DivRem(Bonus, 5, 0)
                If PixelZahl = 0 Then PixelZahl = 1 'Was weniger als 5% das ist nicht mehr fair. Was solls?
                Grafikengine.ptfPosition = Position
                Grafikengine.ptfPosition.Y += 2
                With Grafikengine.recBild
                    .X = 0
                    .Y = 21
                    .Width = 1
                    .Height = 6
                End With
                'So der Startstrich!
                Grafikengine.Sprite.Draw2D(BildTexturen(6), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                Grafikengine.ptfPosition.X += 1
                With Grafikengine.recBild
                    .X = 1
                    .Y = 21
                    .Width = PixelZahl
                    .Height = 6
                End With
                Grafikengine.Sprite.Draw2D(BildTexturen(6), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                Grafikengine.ptfPosition.X += PixelZahl - 1
                With Grafikengine.recBild
                    .X = 23
                    .Y = 21
                    .Width = 1
                    .Height = 6
                End With
                Grafikengine.Sprite.Draw2D(BildTexturen(6), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                'So der normale Restbalken
                Grafikengine.ptfPosition.Y += 2
                Grafikengine.ptfPosition.X += 1
                With Grafikengine.recBild
                    .X = PixelZahl + 1
                    .Y = 27
                    .Width = 2 + 20 - PixelZahl
                    .Height = 4
                End With
                Grafikengine.Sprite.Draw2D(BildTexturen(6), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
            Case Is > 200
                'Wir sind über 200% das ist mein KO! Volle Salve!!!
                Dim Bonus As Integer = Wert - 200
                Dim PixelZahl As Integer = Math.DivRem(Bonus, 5, 0)
                If PixelZahl = 0 Then PixelZahl = 1
                Grafikengine.ptfPosition = Position
                With Grafikengine.recBild
                    .X = 0
                    .Y = 13
                    .Width = 1
                    .Height = 8
                End With
                'So der Startstrich!
                Grafikengine.Sprite.Draw2D(BildTexturen(6), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                Grafikengine.ptfPosition.X += 1
                With Grafikengine.recBild
                    .X = 1
                    .Y = 13
                    .Width = PixelZahl
                    .Height = 8
                End With
                Grafikengine.Sprite.Draw2D(BildTexturen(6), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                If PixelZahl = 20 Then
                    Grafikengine.ptfPosition.X += PixelZahl
                    With Grafikengine.recBild
                        .X = 0
                        .Y = 13
                        .Width = 1
                        .Height = 8
                    End With
                    'So der Endstrich!
                    Grafikengine.Sprite.Draw2D(BildTexturen(6), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                Else
                    Grafikengine.ptfPosition.X += PixelZahl - 1
                    With Grafikengine.recBild
                        .X = 23
                        .Y = 13
                        .Width = 1
                        .Height = 8
                    End With
                    Grafikengine.Sprite.Draw2D(BildTexturen(6), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                    'So der normale Restbalken
                    Grafikengine.ptfPosition.Y += 1
                    Grafikengine.ptfPosition.X += 1
                    With Grafikengine.recBild
                        .X = PixelZahl + 1
                        .Y = 6
                        .Width = 2 + 20 - PixelZahl
                        .Height = 7
                    End With
                    Grafikengine.Sprite.Draw2D(BildTexturen(6), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                End If
            Case Else
                'Wir sind zwischen 100 und 200
                Dim Bonus As Integer = Wert - 100
                Dim PixelZahl As Integer = Math.DivRem(Bonus, 5, 0)
                If PixelZahl = 0 Then PixelZahl = 1
                Grafikengine.ptfPosition = Position
                Grafikengine.ptfPosition.Y += 1
                With Grafikengine.recBild
                    .X = 0
                    .Y = 6
                    .Width = 1
                    .Height = 7
                End With
                'So der Startstrich!
                Grafikengine.Sprite.Draw2D(BildTexturen(6), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                Grafikengine.ptfPosition.X += 1
                With Grafikengine.recBild
                    .X = 1
                    .Y = 6
                    .Width = PixelZahl
                    .Height = 7
                End With
                Grafikengine.Sprite.Draw2D(BildTexturen(6), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                If PixelZahl = 20 Then
                    Grafikengine.ptfPosition.X += PixelZahl
                    With Grafikengine.recBild
                        .X = 0
                        .Y = 6
                        .Width = 1
                        .Height = 7
                    End With
                    'So der Endstrich!
                    Grafikengine.Sprite.Draw2D(BildTexturen(6), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                Else
                    Grafikengine.ptfPosition.X += PixelZahl - 1
                    With Grafikengine.recBild
                        .X = 23
                        .Y = 6
                        .Width = 1
                        .Height = 7
                    End With
                    Grafikengine.Sprite.Draw2D(BildTexturen(6), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                    'So der normale Restbalken
                    Grafikengine.ptfPosition.Y += 1
                    Grafikengine.ptfPosition.X += 1
                    With Grafikengine.recBild
                        .X = PixelZahl + 1
                        .Y = 0
                        .Width = 2 + 20 - PixelZahl
                        .Height = 6
                    End With
                    Grafikengine.Sprite.Draw2D(BildTexturen(6), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                End If
        End Select

    End Sub

    Private Sub DrawReichweitenBonus(ByVal Pos As Point, ByVal Bonus As Integer, ByVal sngRotation As Single, ByVal intColor As Color)
        Grafikengine.recBild = Nothing
        Grafikengine.ptfRotCenter = Nothing
        Grafikengine.ptfPosition = Pos
        Grafikengine.Sprite.Draw2D(BildTexturen(7), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
        If Bonus > 0 Then
            KleinerText.neuerText(New String() {"+" + Bonus.ToString}, Pos.X + 10, Pos.Y - 3, Nothing)
        Else
            KleinerText.neuerText(New String() {Bonus.ToString}, Pos.X + 10, Pos.Y - 3, Nothing)
        End If
        Schriftengine.DrawText(KleinerText)
    End Sub
    Private Sub DrawBewegungsBonus(ByVal Pos As Point, ByVal Bonus As Integer, ByVal sngRotation As Single, ByVal intColor As Color)
        Grafikengine.recBild = Nothing
        Grafikengine.ptfRotCenter = Nothing
        Grafikengine.ptfPosition = Pos
        Grafikengine.Sprite.Draw2D(BildTexturen(8), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
        If Bonus > 0 Then
            KleinerText.neuerText(New String() {"+" + Bonus.ToString}, Pos.X + 10, Pos.Y - 3, Nothing)
        Else
            KleinerText.neuerText(New String() {Bonus.ToString}, Pos.X + 10, Pos.Y - 3, Nothing)
        End If
        Schriftengine.DrawText(KleinerText)
    End Sub

    Public Overrides Sub RemoveHandles()
        RemoveHandler Hauptmenü.MainMenü.KeyDown, AddressOf KeyDown2
        RemoveHandler Hauptmenü.MainMenü.MalPanel.MouseDown, AddressOf MouseDown2
        RemoveHandler Hauptmenü.MainMenü.MalPanel.MouseWheel, AddressOf MouseWheel2
        MyBase.RemoveHandles()
    End Sub

#Region "Notlösung"
    Public Sub MouseDown2(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If IsVisble() Then
            If (Not Objekt2D.AlreadyKlickt And Not HasFocus) Or Focused Then
                Objekt2D.AlreadyKlickt = True
                Select Case e.Button
                    Case MouseButtons.Right

                        InfoBeenden()
                End Select
            End If
        End If
    End Sub
    Public Sub KeyDown2(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
        If IsVisble() Then
            If (Not Objekt2D.AlreadyKlickt And Not HasFocus) Or Focused Then
                Objekt2D.AlreadyKlickt = True
                Dim KartenauswahlModus As Boolean = False
                Select Case Hauptmenü.Formmodus
                    Case Hauptmenü.Formmodi.Kartenauswahl
                        KartenauswahlModus = True
                End Select

                Select Case e.KeyCode
                    Case My.Settings.Links
                        If KartenauswahlModus Then
                            MomentanerKO -= 1

                            If MomentanerKO < 0 Then
                                MomentanerKO = Objektverwalter.KOS.Length - 1
                            End If
                            If Objektverwalter.KOS(MomentanerKO).KOID = "ZUFALL" Then
                                MomentanerKO -= 1
                            End If
                        Else
                            If MomentanerKO = 1 Then
                                MomentanerKO = 0
                            Else
                                MomentanerSpieler -= 1
                                If MomentanerSpieler < 1 Then
                                    MomentanerSpieler = Objektverwalter.Spielfeld.Spieler.Length - 1
                                End If
                                If Objektverwalter.Spielfeld.Spieler(MomentanerSpieler).KOS(1) Is Nothing Then
                                    MomentanerKO = 0
                                Else
                                    MomentanerKO = 1
                                End If
                            End If
                        End If
                    Case My.Settings.Rechts
                        If KartenauswahlModus Then
                            MomentanerKO += 1
                            If MomentanerKO >= Objektverwalter.KOS.Length - 1 Then
                                MomentanerKO = 0
                            End If
                            If Objektverwalter.KOS(MomentanerKO).KOID = "ZUFALL" Then
                                MomentanerKO += 1
                            End If
                        Else
                            If MomentanerKO = 0 And Not Objektverwalter.Spielfeld.Spieler(MomentanerSpieler).KOS(1) Is Nothing Then
                                MomentanerKO = 1
                            Else
                                MomentanerSpieler += 1
                                MomentanerKO = 0
                                If MomentanerSpieler >= Objektverwalter.Spielfeld.Spieler.Length Then
                                    MomentanerSpieler = 1
                                End If
                            End If
                        End If
                    Case My.Settings.Oben
                        Seite = Seiten.KOInformationen
                    Case My.Settings.Unten
                        Seite = Seiten.EinheitenInformationen
                    Case My.Settings.Abrechen
                        InfoBeenden()
                        Exit Sub
                    Case My.Settings.Bestätigen
                        InfoBeenden()
                        Exit Sub
                    Case Keys.Escape
                        InfoBeenden()
                        Exit Sub
                End Select
                If Not KOAnzeige Is Nothing Then
                    KOAnzeige.Laden(Objektverwalter.Spielfeld.Spieler(MomentanerSpieler), New Point(StartpunktX, StartpunktY))
                End If
                If KartenauswahlModus Then
                    KOChange(MomentanerKO)
                Else
                    KOChange()
                End If
            End If
        End If
    End Sub
    Public Sub MouseWheel2(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If IsVisble() Then
            If e.Delta > 0 Then
                Seite = Seiten.KOInformationen
            ElseIf e.Delta < 0 Then
                Seite = Seiten.EinheitenInformationen
            End If
        End If
    End Sub
#End Region
End Class
